factorization methods